#ifndef __GD32_ENETPHY_INIT__
#define __GD32_ENETPHY_INIT__

#ifdef __cplusplus
extern "C"
{
#endif

#include <stdint.h>
#include "netif.h"
#include "gd32f4xx.h" // Device header

#define USE_DHCP 1 /* enable DHCP, if disabled static address is used */

#define USE_ENET_INTERRUPT
#define TIMEOUT_CHECK_USE_LWIP
/* MAC address: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
#define MAC_ADDR0 ((uint8_t)(*((uint32_t *)(0x1FFF7A14)) >> 8))
#define MAC_ADDR1 ((uint8_t)(*((uint32_t *)(0x1FFF7A14))))
#define MAC_ADDR2 ((uint8_t)(*((uint32_t *)(0x1FFF7A18)) >> 24))
#define MAC_ADDR3 ((uint8_t)(*((uint32_t *)(0x1FFF7A18)) >> 16))
#define MAC_ADDR4 ((uint8_t)(*((uint32_t *)(0x1FFF7A18)) >> 8))
#define MAC_ADDR5 ((uint8_t)(*((uint32_t *)(0x1FFF7A18))))

/* static IP address: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */
#define IP_ADDR0 192
#define IP_ADDR1 168
#define IP_ADDR2 129
#define IP_ADDR3 80

/* remote IP address: IP_S_ADDR0.IP_S_ADDR1.IP_S_ADDR2.IP_S_ADDR3 */
#define IP_S_ADDR0 192
#define IP_S_ADDR1 168
#define IP_S_ADDR2 129
#define IP_S_ADDR3 1

/* net mask */
#define NETMASK_ADDR0 255
#define NETMASK_ADDR1 255
#define NETMASK_ADDR2 255
#define NETMASK_ADDR3 0

/* gateway address */
#define GW_ADDR0 192
#define GW_ADDR1 168
#define GW_ADDR2 129
#define GW_ADDR3 1

/* MII and RMII mode selection */
#define RMII_MODE // user have to provide the 50 MHz clock by soldering a 50 MHz oscillator
// #define MII_MODE

/* clock the PHY from external 25MHz crystal (only for MII mode) */
#ifdef MII_MODE
#define PHY_CLOCK_MCO
#endif

    /* function declarations */
    /* updates the system local time */
    void time_update(void);
    /* insert a delay time */
    void delay_10ms(uint32_t ncount);
    /* setup ethernet system(GPIOs, clocks, MAC, DMA, systick)*/
    void enet_system_setup(void *pArg);
    void enet_system_reconfig(void *pArg);

#ifdef __cplusplus
}
#endif

#endif
